package model

import (
	"time"
)

// Cluster 定义集群表的模型
type Cluster struct {
	ID          int64     `gorm:"primaryKey;autoIncrement;comment:自增ID" json:"id"`
	Name        string    `gorm:"type:varchar(128);not null;comment:集群名" json:"name"`
	DBType      string    `gorm:"type:varchar(12);not null;comment:数据库类型 MySQL | PostgreSQL" json:"db_type"`
	BusinessOne string    `gorm:"type:varchar(64);comment:一级业务线" json:"business_one"`
	BusinessTwo string    `gorm:"type:varchar(64);comment:二级业务线" json:"business_two"`
	Level       string    `gorm:"type:varchar(12);not null;comment:等级 1 | 2 | 3 | 4" json:"level"`
	ClusterType string    `gorm:"type:varchar(10);not null;comment:类型：主从复制M-S | 分片Sharding" json:"cluster_type"`
	Env         string    `gorm:"type:varchar(12);not null;comment:环境 DEV | PRO" json:"env"`
	IsShard     bool      `gorm:"type:boolean;not null;default:false;comment:是否分库" json:"is_shard"`
	ShardNum    int       `gorm:"comment:分片库数量，默认为0" json:"shard_num"`
	Unit        string    `gorm:"type:varchar(50);not null;comment:单元标识：SHANGHAI | BEIJING" json:"unit"`
	Status      string    `gorm:"type:varchar(12);not null;default:online;comment:状态，online/offline" json:"status"`
	Remark      string    `gorm:"type:varchar(255);comment:备注" json:"remark"`
	CreateTime  time.Time `gorm:"autoCreateTime;comment:创建时间" json:"create_time"`
	UpdateTime  time.Time `gorm:"autoUpdateTime;comment:更新时间" json:"update_time"`
	IsDelete    bool      `gorm:"type:boolean;default:false;comment:逻辑删除标记，FALSE表示未删除，TRUE表示已删除" json:"is_delete"`
}

// TableName 指定表名
func (Cluster) TableName() string {
	return "cluster"
}

type ClusterListRequest struct {
	Name        string `form:"name" json:"name"`
	DBType      string `form:"db_type" json:"db_type"`
	BusinessOne string `form:"business_one" json:"business_one"`
	BusinessTwo string `form:"business_two" json:"business_two"`
	Level       string `form:"level" json:"level"`
	ClusterType string `form:"cluster_type" json:"cluster_type"`
	Env         string `form:"env" json:"env"`
	Unit        string `form:"unit" json:"unit"`
	Status      string `form:"status" json:"status"`
	Search      string `json:"search"`
	Page        int64  `form:"page" json:"page" default:"1"`
	PageSize    int64  `form:"page_size" json:"page_size" default:"10"`
}

type ClusterListResponse struct {
	Count    uint64     `json:"count"`
	Records  []*Cluster `json:"records"`
	Page     int64      `json:"page"`
	PageSize int64      `json:"page_size"`
}
